#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin>>n;
    int a[n];
    int st[n];
    int ans[n][2];  //0表示左边比它小的，1右边比它小的
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);

    int r=0;        //这个是栈的元素个数
    int cur; 
    //遍历处理
    for(int i=0;i<n;i++)
    {
        //满足有元素（而且大压小就入栈，不满足出栈，更新）
        while(r>0&&a[i]<=a[st[r-1]])
        {
            cur=st[--r];                    //保存栈顶元素
            ans[cur][0]=r>0?st[r-1]:-1;     //左比它小的，就是它原来压的
            ans[cur][1]=i;                  //右边比它小的,就是让它弹出的元素
        }
        st[r++]=i;  //入栈元素
    }
    //清算，栈里还有元素，全部置-1
    while(r>0)
    {
        cur=st[--r];
        ans[cur][0]=r>0?st[r-1]:-1;
        ans[cur][1]=-1;
    }
    //修改答案:从右往左修正
    // n-1位置的右侧答案一定-1
    for(int i=n-2;i>=0;i--)
    {
        // 第一个4的右侧改成第二个4的右侧，第1和2个3的右侧改成第三个3的右侧
        if(ans[i][1]!=-1&&a[ans[i][1]]==a[i])
        {
            ans[i][1]=ans[ans[i][1]][1];        //比如3  3  3 4 4
        }
    }
    for(int i=0;i<n;i++)
    {
        cout<<ans[i][0]<<" "<<ans[i][1]<<endl;
    }

}
// 64 位输出请用 printf("%lld")